fail2ban auf Debian installieren und konfigurieren
Um Bruteforce Attacken auf ssh oder ftp Servern abzuwehren, empfiehlt sich unter anderem der Einsatz von fail2ban. Über die iptables sperrt fail2ban Quell-IPs, über die versucht wird, ein Passwort zu erraten. Je nach Konfiguration wird die IP nach einer bestimmten Anzahl von Fehlversuchen für eine gewisse Zeit gesperrt.
Installation
Wir benutzen fail2ban aus den Debian Paketquellen. Die aktuelle Version unter Debian Wheezy ist 0.8.6-3wheezy2. Damit wir mehr Informationen von den IP-Adressen bekommen, installieren wir auch noch whois mit dazu.
tux@earth:~$ sudo apt-get install fail2ban whois
Konfiguration
Nach der Installation gehen wir nach /etc/fail2ban
und beginnen mit der Konfiguration.
Datei/Verzeichnis | Beschreibung |
---|---|
/etc/fail2ban/action.d/ | Aktionen, welche ausgeführt werden, wenn eine IP-Adresse gesperrt werden soll |
/etc/fail2ban/fail2ban.conf | Basis Einstellungen |
/etc/fail2ban/filter.d/ | Filter (Reguläre Ausdrücke), womit Fail2Ban Angriffe aus dem Logfiles erkennt |
/etc/fail2ban/jail.conf | Einstellung zur Überwachung der einzelnen Services (nur SSH ist schon aktiv) |
Mann soll nicht die Datei /etc/fail2ban/jail.conf
benutzen, sondern eine Eigene Datei /etc/fail2ban/jail.local
erstellen.
tux@earth:~$ sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
tux@earth:~$ sudo mv /etc/fail2ban/jail.conf /etc/fail2ban/jail.conf.dist
Der Wert ignoreip, schließt diese definierten IP-Adressen aus. Mann könnte somit die NAT-IP-Adresse vom Office eingeben. Der Wert bantime gibt die Zeit in Sekunden an, wie lange die IP-Adresse gesperrt bleibt. Ein wert von -1 bedeutet, dass IP-Adressen permanent gesperrt bleiben. Der Wert destemail ist die Email-Adresse des Administrators (default: root@localhost).
[DEFAULT]
ignoreip = 127.0.0.1 <NATIP01> <NATIP02>
bantime = 86400
destemail = tux@example.com
....
[apache-myadmin]
enabled = true
port = http,https
filter = apache-myadmin
banaction = iptables-allports
action = %(action_mwl)s
logpath = /var/log/apache*/*error.log
maxretry = 2
In unserer Konfiguration haben wir einen Eintrag [apache-myadmin] hinzugefügt, welche nicht in der Standard Konfiguration vorhanden ist. Damit dieser Jail funktioniert, müssen wir noch den dazugehörigen Filter erstellen.
[Definition]
failregex = ^[[]client <HOST>[]] File does not exist: *myadmin* *\s*$
^[[]client <HOST>[]] File does not exist: *MyAdmin* *\s*$
^[[]client <HOST>[]] File does not exist: *mysqlmanager* *\s*$
^[[]client <HOST>[]] File does not exist: *setup.php* *\s*$
^[[]client <HOST>[]] File does not exist: *mysql* *\s*$
^[[]client <HOST>[]] File does not exist: *phpmanager* *\s*$
^[[]client <HOST>[]] File does not exist: *phpadmin* *\s*$
^[[]client <HOST>[]] File does not exist: *sqlmanager* *\s*$
^[[]client <HOST>[]] File does not exist: *sqlweb* *\s*$
^[[]client <HOST>[]] File does not exist: *webdb* *\s*
ignoreregex =
Damit nach einem System-Crash Fail2Ban auch wieder korrekt startet, setzen wir in der Datei /etc/default/fail2ban
, den Parameter -x in der Variable FAIL2BAN_OPTS. Damit veranlassen wir Fail2Ban, dass nach einem System-Crash die Datei /var/run/fail2ban/fail2ban.sock
gelöscht wird.
tux@earth:~$ sudo vi /etc/default/fail2ban
....
FAIL2BAN_OPTS="-x"
....
Je nachdem ob wir ’sendmail‘ oder ’mail‘ als mta verwenden, können wir unter action.d/sendmail-whois-lines.conf bzw. action.d/mail-whois-lines.conf die entsprechenden Einstellungen für die Benachrichtigungen vornehmen. In unserem Fall, möchten wir die Nachrichten in Deutsch bekommen. Dazu kopieren wir die Original Datei nach -en.conf und *-de.conf. Dann löschen wir die Original Datei und setzen einen Symlink auf die *-de.conf* Datei.
tux@earth:~$ sudo cp action.d/sendmail-whois-lines.conf action.d/sendmail-whois-lines-en.conf
tux@earth:~$ sudo cp action.d/sendmail-whois-lines.conf action.d/sendmail-whois-lines-de.conf
tux@earth:~$ sudo rm sendmail-whois-lines.conf && sudo ln -s sendmail-whois-lines-de.conf sendmail-whois-lines.conf
Nun können wir die Ausgabe eine E-Mail Benachrichtigung entsprechen anpassen und übersetzen. Da die Deutsche Sprache Sonderzeichen enthält, sollten wir den Content-Type der E-Mail Nachricht auf text/plain; charset=“UTF8″ ändern. Das geht aber nur, wenn wir dazu keine Eigene Zeile verwenden, sondern wie im Beispiel am Ende der To: Zeile anhängen.
actionstart = printf %%b "Subject: [earth] Fail2Ban - <name>: gestartet
From: Fail2Ban <<sender>>
To: <dest>\nContent-Type: text/plain; charset=\"UTF8\"\n
Hallo,\n
Der jail <name> wurde erfolgreich gestartet.\n
Viele Grüße,\n
Fail2Ban" | /usr/sbin/sendmail -f <sender> <dest>
So, wenn alles getan ist… trinke ein Bier…, nee, das war was anderes :smile:
Nachdem wir nun Fail2Ban soweit eingerichtet haben, starten wir den Service mit folgenden Befehl neu.
tux@earth:~$ sudo service fail2ban restart
Nützliche Befehle für fail2ban
Logfiles von fail2ban ansehen.
tux@earth:~$ sudo tail /var/log/fail2ban.log
Status von fail2ban anzeigen.
tux@earth:~$ sudo fail2ban-client status
Status des jail ssh von fail2ban anzeigen.
tux@earth:~$ sudo fail2ban-client status sshd
Reguläre Ausdrücke des Filters filter.d/sshd.conf testen.
tux@earth:~$ sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf
Eine IP-Adresse mit fail2ban-client wieder entsperren.
tux@earth:~$ sudo fail2ban-client set sshd unbanip <IP>